<?php

include('../../include/functions.inc.php');
if (!isEmpty(getParam('operation'))) {
    switch (getParam('operation')) {
        case 'get':
            get($db);
            break;
        case 'getT':
            getT($db);
            break;
        case 'c':
            cerrar($db, $user);
            break;
        case 'a':
            abrir($db, $user);
            break;
        case 'cT':
            cerrarT($db, $user);
            break;
        case 'aT':
            abrirT($db, $user);
            break;
    }
}

function get($db) {
    unset($_SESSION["cierreWhere"]);
    unset($_SESSION["cierre"]);
    $dia = date("d", strtotime(getParam("cierreDia")));
    $mes = date("m", strtotime(getParam("cierreDia")));
    $anio = date("Y", strtotime(getParam("cierreDia")));
    $where = "DIA=$dia AND MES=$mes AND YEAR=$anio";
    $rsCierre = $db->query_select("cllg_cierre", $where);
    $rsCierre = $rsCierre[0];
    if (count($rsCierre) > 0) { //ya hay cierre para este dia
        $uCierre = array(
            "DIA" => $rsCierre["DIA"],
            "MES" => $rsCierre["MES"],
            "YEAR" => $rsCierre["YEAR"],
            "FECHA" => getParam("cierreDia"),
            "MONTO" => $rsCierre["MONTO"],
            "CANTIDAD_FAC" => $rsCierre["CANTIDAD_FAC"],
            "STATUS" => $rsCierre["STATUS"]);
        if ($uCierre["STATUS"] == 1) {//cerrado
            $uCierre["CERRADO"] = 1;
        } else {
            $resum = getSumByDate($db, date("Y-m-d", strtotime(getParam("cierreDia"))), NULL);
            $uCierre["ABIERTO"] = 1;
            $uCierre["CANTIDAD_FAC"] = $resum["CANTIDAD_FAC"];
            $uCierre["MONTO"] = $resum["MONTO"];
        }
    } else { //no hay cierre para esta fecha
        $resum = getSumByDate($db, date("Y-m-d", strtotime(getParam("cierreDia"))), NULL);
        $uCierre = array(
            "DIA" => $dia,
            "MES" => $mes,
            "YEAR" => $anio,
            "FECHA" => getParam("cierreDia"),
            "MONTO" => $resum["MONTO"],
            "CANTIDAD_FAC" => $resum["CANTIDAD_FAC"],
            "NUEVO" => 1);
    }
    $_SESSION["cierreWhere"] = $where;
    $_SESSION["cierre"] = serialize($uCierre);
    header('Location: datosCierre.php');
}

function getT($db) {
    unset($_SESSION["cierreWhere"]);
    unset($_SESSION["cierre"]);
    $_SESSION["cierre"] = NULL;

    $diaI = date("d", strtotime(getParam("desde")));
    $mesI = date("m", strtotime(getParam("desde")));
    $anioI = date("Y", strtotime(getParam("desde")));
    $diaF = date("d", strtotime(getParam("hasta")));
    $mesF = date("m", strtotime(getParam("hasta")));
    $anioF = date("Y", strtotime(getParam("hasta")));
    $where = "DIA>=" . $diaI . " AND DIA<=" . $diaF;
    if ($mesF == $mesI) {
        $where.=" AND MES=" . $mesI;
    } else {
        $where.=" AND MES>=" . $mesI;
        $where.=" AND MES<=" . $mesF;
    }
    if ($anioF == $anioI) {
        $where.=" AND YEAR=" . $anioI;
    } else {
        $where.=" AND YEAR>=" . $anioI;
        $where.=" AND YEAR<=" . $anioF;
    }
    $abiertos = $db->queryToArray("select count(*) ABIERTOS from cllg_cierre where STATUS=0 AND " . $where);
    $abiertos = $abiertos[0]["ABIERTOS"];
    $cerrados = $db->queryToArray("select count(*) CERRADOS, sum(CANTIDAD_FAC) CANT, sum(monto) MONTO
            from cllg_cierre where STATUS=1 AND " . $where);
    $cerrados = $cerrados[0];
    $diasRango = getDatesDif(getParam("desde"), getParam("hasta")) + 1;
    $sumaQuerys = $abiertos + $cerrados["CERRADOS"];
    $res = array();
    if ($sumaQuerys == $diasRango) {
        $res["PENDIENTES"] = $abiertos;
        $res["CANTIDAD_FAC"] = $cerrados["CANT"];
        $res["MONTO"] = $cerrados["MONTO"];
    } else {
        $res = array("MONTO" => 0, "CANTIDAD_FAC" => 0, "PENDIENTES" => ($diasRango - $cerrados["CERRADOS"]));
    }

    $res["DESDE"] = getParam("desde");
    $res["HASTA"] = getParam("hasta");

    if ($res["MONTO"] <= 0) {
        $resum = getSumByDate($db, getParam("desde"), getParam("hasta"));
        $res["MONTO"] = $resum["MONTO"];
        $res["CANTIDAD_FAC"] = $resum["CANTIDAD_FAC"];
    }
    $_SESSION["cierreWhere"] = $where;
    $_SESSION["cierre"] = serialize($res);

    header('Location: datosCierre.php');
}

function cerrar($db, $user) { //cierre por dia
    $where = $_SESSION["cierreWhere"];
    $cierre = unserialize($_SESSION["cierre"]);
    if ($cierre["NUEVO"] == 1) {
        unset($cierre["NUEVO"]);
        $cierre["FECHA"] = sqlValue(date("Y-m-d"), "date");
        $cierre["FK_USER"] = sqlValue($user->name, "text");
        $cierre["STATUS"] = sqlValue(1, "int");
        $db->query_insert("cllg_cierre", $cierre);
    } else {
        unset($cierre["DIA"]);
        unset($cierre["MES"]);
        unset($cierre["YEAR"]);
        unset($cierre["ABIERTO"]);
        unset($cierre["FECHA"]);
        $cierre["STATUS"] = 1;
        $db->query_update("cllg_cierre", $cierre, $where);
    }
    $res = array("R" => 1, "MSG" => "FINALIZADO");
    $_SESSION["pack"] = serialize($res);
    unset($_SESSION["cierre"]);
    header('Location: ../../include/transport.php');
}

function cerrarT($db, $user) { //cierre por rango de fechas
    $where = $_SESSION["cierreWhere"];
    $cierre = unserialize($_SESSION["cierre"]);

    $diaI = date("d", strtotime($cierre["DESDE"]));
    $mesI = date("m", strtotime($cierre["DESDE"]));
    $anioI = date("Y", strtotime($cierre["DESDE"]));
    $diaF = date("d", strtotime($cierre["HASTA"]));
    $mesF = date("m", strtotime($cierre["HASTA"]));
    $anioF = date("Y", strtotime($cierre["HASTA"]));
    $anio = $anioI;
    while ($anio <= $anioF) {
        $mes = $mesI;
        while ($mes <= $mesF) {
            if ($mes == $mesF) {
                $diaMeta = $diaF;
            } else {
                $diaMeta = getDiasMes($anio, $mes);
            }
            $dia = $diaI;
            while ($dia <= $diaMeta) {
                $total = getSumByDate($db, "$anio-$mes-$dia", NULL);
                $where = "DIA=" . $dia . " AND MES=" . $mes . " AND YEAR=" . $anio;
                $res = $db->query_select("cllg_cierre", $where);

                if (count($res) <= 0) {  //NO EXISTE AUN EN LOS CIERRES
                    $nCierre = array("DIA" => $dia, "MES" => $mes, "YEAR" => $anio,
                        "FECHA" => sqlValue(date("Y-m-d"), "date"),
                        "FK_USER" => sqlValue($user->name, "text"),
                        "STATUS" => sqlValue(1, "int"), //CERRADO
                        "MONTO" => $total["MONTO"] == NULL ? "0" : $total["MONTO"],
                        "CANTIDAD_FAC" => $total["CANTIDAD_FAC"] == NULL ? "0" : sqlValue($total["CANTIDAD_FAC"], "int"));
                    $db->query_insert("cllg_cierre", $nCierre);
                } else {
                    if ($res["STATUS"] == 0) {  // si existe yesta abierto por alguna razon
                        $nCierre = array(
                            "STATUS" => sqlValue(1, "int"), //CERRADO
                            "MONTO" => $total["MONTO"] == NULL ? "0" : sqlValue($total["MONTO"], "double"),
                            "CANTIDAD_FAC" => $total["CANTIDAD_FAC"] == NULL ? "0" : sqlValue($total["CANTIDAD_FAC"], "int"));
                        $db->query_update("cllg_cierre", $nCierre, $where);
                    }
                }
                $dia++;
            }
            $diaI = 1;
            $mes++;
        }
        $anio++;
    }

    $res = array("R" => 1, "MSG" => "FINALIZADO");
    $_SESSION['pack'] = serialize($res);
    header('Location: ../../include/transport.php');
}

function abrir($db, $user) { //cierre por dia
    if (userTest($db, getParam("usuario"), getParam("clave"))) {
        $where = $_SESSION["cierreWhere"];
        unset($_SESSION["cierre"]);
        $db->query_update("cllg_cierre", array("STATUS" => 0), $where);
        $res = array("R" => 1, "MSG" => "FINALIZADO");
    } else {
        $res = array("R" => 0, "MSG" => "EL USUARIO INGRESADO NO PUEDE AUTORIZAR EL CAMBIO!");
    }
    $_SESSION['pack'] = serialize($res);
    header('Location: ../../include/transport.php');
}

function abrirT($db, $user) { //cierre por rango de fechas
    if (userTest($db, getParam("usuario"), getParam("clave"))) {
        $where = $_SESSION["cierreWhere"];
        $cierre = unserialize($_SESSION["cierre"]);
        $db->query_update("cllg_cierre", array("STATUS" => 0), $where);
        $res = array("R" => 1, "MSG" => "FINALIZADO");
    } else {
        $res = array("R" => 0, "MSG" => "EL USUARIO INGRESADO NO PUEDE AUTORIZAR EL CAMBIO!");
    }
    $_SESSION['pack'] = serialize($res);
    header('Location: ../../include/transport.php');
}

function getSumByDate($db, $fInicio, $fFinal) {
    $baseSQL = "select count(*) CANTIDAD_FAC,sum(TOTAL) MONTO
                from cllg_factura where ";
    if ($fFinal == NULL) {
        $baseSQL = sprintf($baseSQL . "FECHA BETWEEN %s AND %s AND STATUS IN (1,2)", sqlValue($fInicio, "date"), sqlValue($fInicio, "date"));
    } else {
        $baseSQL = sprintf($baseSQL . "FECHA BETWEEN %s AND %s AND STATUS IN(1,2)", sqlValue($fInicio, "date"), sqlValue($fFinal, "date"));
    }
    $res = $db->queryToArray($baseSQL);
    $res = $res[0];
    return $res;
}

function userTest($db, $usuario, $clave) {
    $r = $db->query_select("cllg_user", sprintf("USER_NAME='%s'", $usuario));
    if (count($r) > 0) {
        $u = $r[0];
        $pass = $u["PASSWORD"];
        return ($pass == md5($clave));
    }
    return false;
}

?>